// 注意⚠️：只是改写部分数组，所以在访问数据的时候没有改写的还需要继承数组的原型方法
const oldArrayPrototypeMethods = Array.prototype
export let arrayMethods = Object.create(oldArrayPrototypeMethods)
// 以下方法会直接影响到原数组的，所以进行重写
const methods = [
  'push',
  'pop',
  'shift',
  'unshift',
  'splice',
  'reverse',
  'sort'
]
methods.forEach(method => {
  arrayMethods[method] = function (...args) {
    // 1. 实现原有功能
    let result = oldArrayPrototypeMethods[method].apply(this, args)
    // 2. 添加数据劫持
    let inserted
    switch (method) {
      case 'push':
      case 'unshift':
        inserted = args
        break
      case 'splice':
        console.log(args)
        inserted = args.slice(2)
      default:
        break
    }
    this.__ob__.observeArray(inserted)
    return result
  }
})
